
package com.csz.model;

import com.csz.dao.Persistencia;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* @author Arthur F. Zanona */

public class Score extends Persistencia {
    private static final long serialVersionUID = 1L;

    private Integer scoBioId;
    private Integer scoCarId;
    private Integer scoCatId;
    private Double scoValor;

    public Score() {
    }

    public Integer getBiotipoId() {
        return scoBioId;
    }

    public Integer getCaracteristicaId() {
        return scoCarId;
    }

    public Integer getCategoriaId() {
        return scoCatId;
    }

    public Double getValor() {
        return scoValor;
    }

    public void setBiotipoId(Integer scoBioId) {
        this.scoBioId = scoBioId;
    }

    public void setCaracteristicaId(Integer scoCarId) {
        this.scoCarId = scoCarId;
    }

    public void setCategoriaId(Integer scoCatId) {
        this.scoCatId = scoCatId;
    }

    public void setValor(Integer scoValor) {
        this.scoValor = new Double(scoValor);
    }

    public void setValor(Double scoValor) {
        this.scoValor = scoValor;
    }

    public Score(Integer id , Integer scoBioId, Integer scoCarId, Integer scoCatId, Double scoValor) {
        this.id = id;
        this.scoBioId = scoBioId;
        this.scoCarId = scoCarId;
        this.scoCatId = scoCatId;
        this.scoValor = scoValor;
    }

    @Override
    public void salvar() {
        String namedQuery = this.getId() == null ? Inserir : Atualizar ;
        // passagem de parametro
        List<Object> params = Arrays.asList(
                new Object[] {
                    this.scoBioId,
                    this.scoCarId,
                    this.scoCatId,
                    this.scoValor,
                    // se for inserir, esse parametro é o retorno da SP,
                    // senao eh a clausa do where na atualizacao
                    this.getId() != null ? this.getId() : null
                }
         );
        // fim passagem de parametro
        
        // o retorno da sp é o id da entidade
        this.id = (Integer) callNamedStoredProcedure(namedQuery, params , Integer.class);
    }

    public static Object consultar(Integer id) {
        return Score.consultarNamedQuery(ConsultarPorId, Arrays.asList(new Object[]{id}));
    }

    @Override
    public void remover() {
        PreparedStatement ps = createStatementNamedQuery(Remover, Arrays.asList( new Object[] { this.getId() } ));
        try {
            ps.execute();
        } catch (SQLException ex) {}
    }

    public static List<Object> consultar(){
        return Score.consultarNamedQuery(ConsultarTodos, Arrays.asList(new Object[]{}));
    }

   public static List<Object> consultarNamedQuery(String namedQuery, List params){
        PreparedStatement ps = createStatementNamedQuery( namedQuery, params );
        List<Object> lista = new ArrayList<Object>();
        try {
            ResultSet rs = ps.executeQuery();
            while ( rs.next() ) {
                Score s = new Score(
                        rs.getInt("sco_id")  ,
                        rs.getInt("sco_bio_id") ,
                        rs.getInt("sco_car_id") ,
                        rs.getInt("sco_cat_id") ,
                        rs.getDouble("sco_valor")
                );
                lista.add(s);
            }
        }
        catch (SQLException ex) {}
        return lista;
    }

   // QUERY SQL --------------------------------------------------------------------------------------------------------------
    public static final String ConsultarPorBioId = "SELECT cat.cat_nome,car.car_nome, sco.sco_valor " +
                                                    " FROM score sco " +
                                                    " JOIN categoria cat ON cat.cat_id = sco.sco_cat_id " +
                                                    " JOIN caracteristica car ON car.car_id = sco.sco_car_id " +
                                                    " JOIN biotipo bio ON bio.bio_id = sco.sco_bio_id " +
                                                     "WHERE sco.sco_bio_id = ?";
    
    public static final String ConsultarPorId = "SELECT sco_id,sco_bio_id,sco_car_id,sco_cat_id,sco_valor FROM score WHERE sco_id = ?";
    public static final String ConsultarTodos  = "SELECT sco_id,sco_bio_id,sco_car_id,sco_cat_id,sco_valor FROM score";
    private static final String Remover = "CALL apagar_score (?)";
    private static final String Atualizar = "CALL atualizar_score (?,?,?,?,?)";
    private static final String Inserir = "CALL inserir_score (?,?,?,?,?)";
    // FIM QUERY SQL --------------------------------------------------------------------------------------------------------------

}
